// categories.js - Vuex模块用于管理分类数据

import api from '@/utils/api.js'

// 初始状态
const state = {
  categories: [],
  activeCategory: null
}

// Getters
const getters = {
  // 获取所有分类
  getAllCategories: state => state.categories,

  // 获取当前活动分类
  getActiveCategory: state => state.activeCategory,

  // 获取固定分类（通常作为默认分类，如"所有任务"）
  getFixedCategories: state => state.categories.filter(cat => cat.fixed),

  // 获取非固定分类（可自定义的分类）
  getCustomCategories: state => state.categories.filter(cat => !cat.fixed),

  // 按ID获取分类
  getCategoryById: state => id => state.categories.find(cat => cat.id === id)
}

// Actions
const actions = {
  // 初始化分类数据
  async initCategories({ commit, state }) {
    try {
      // 如果已有数据，不重复加载
      if (state.categories && state.categories.length > 0) {
        return state.categories
      }

      // 使用API接口获取分类数据
      const response = await api.categories.getAll();

      // 如果没有数据，先初始化基础数据
      if (!response.data || response.data.length === 0) {
        // 调用初始化API，预设一些基础数据
        await api.initBaseData()
        // 再次获取分类
        const newResponse = await api.categories.getAll()
        commit('SET_CATEGORIES', newResponse.data || [])
      } else {
        commit('SET_CATEGORIES', response.data)
      }

      // 设置默认活动分类（通常是第一个固定分类）
      if (state.categories.length > 0 && !state.activeCategory) {
        const defaultCategory = state.categories.find(cat => cat.fixed) || state.categories[0]

        commit('SET_ACTIVE_CATEGORY', defaultCategory)
      }

      return state.categories
    } catch (error) {
      console.error('初始化分类数据失败:', error)
      return []
    }
  },

  // 保存所有分类数据
  async saveCategories({ commit }, categories) {
    try {
      // 使用API保存分类
      const response = await api.categories.saveAll(categories)

      if (response.code === 200) {
        // 更新本地状态
        commit('SET_CATEGORIES', categories)
        // 如果当前活动分类已被删除，重新设置活动分类
        const activeId = state.activeCategory ? state.activeCategory.id : null
        if (activeId && !categories.find(cat => cat.id === activeId)) {
          const defaultCategory = categories.find(cat => cat.fixed) || categories[0]
          commit('SET_ACTIVE_CATEGORY', defaultCategory)
        }
        return true
      }
      return false
    } catch (error) {
      console.error('保存分类数据失败:', error)
      return false
    }
  },

  // 添加新分类
  async addCategory({ commit, state }, category) {
    try {
      // 使用API添加分类
      const response = await api.categories.add(category)

      if (response.code === 200 && response.data) {
        // 更新本地状态
        const updatedCategories = [...state.categories, response.data]
        commit('SET_CATEGORIES', updatedCategories)
        return response.data
      }
      return null
    } catch (error) {
      console.error('添加分类失败:', error)
      return null
    }
  },

  // 更新分类
  async updateCategory({ commit, state }, category) {
    try {
      // 使用API更新分类
      const response = await api.categories.update(category)

      if (response.code === 200 && response.data) {
        // 更新本地状态
        const index = state.categories.findIndex(cat => cat.id === category.id)
        if (index !== -1) {
          const updatedCategories = [...state.categories]
          updatedCategories[index] = response.data
          commit('SET_CATEGORIES', updatedCategories)

          // 如果更新的是当前活动分类，也更新活动分类
          if (state.activeCategory && state.activeCategory.id === category.id) {
            commit('SET_ACTIVE_CATEGORY', response.data)
          }
        }
        return response.data
      }
      return null
    } catch (error) {
      console.error('更新分类失败:', error)
      return null
    }
  },

  // 删除分类
  async deleteCategory({ commit, state }, id) {
    try {
      // 阻止删除固定分类
      const categoryToDelete = state.categories.find(cat => cat.id === id)
      if (categoryToDelete && categoryToDelete.fixed) {
        console.error('固定分类不可删除')
        return false
      }

      // 使用API删除分类
      const response = await api.categories.delete(id)

      if (response.code === 200) {
        // 更新本地状态
        const updatedCategories = state.categories.filter(cat => cat.id !== id)
        commit('SET_CATEGORIES', updatedCategories)

        // 如果删除的是当前活动分类，重新设置活动分类
        if (state.activeCategory && state.activeCategory.id === id) {
          const defaultCategory = updatedCategories.find(cat => cat.fixed) || updatedCategories[0]
          commit('SET_ACTIVE_CATEGORY', defaultCategory || null)
        }

        return true
      }
      return false
    } catch (error) {
      console.error('删除分类失败:', error)
      return false
    }
  },

  // 设置当前活动分类
  setActiveCategory({ commit }, category) {
    // 确保category是一个有效的对象
    if (!category || typeof category !== 'object' || !category.id) {
      console.error('尝试设置无效的活动分类:', category);
      return;
    }
    commit('SET_ACTIVE_CATEGORY', category);
  }
}

// Mutations
const mutations = {
  // 设置所有分类
  SET_CATEGORIES(state, categories) {
    state.categories = categories
  },

  // 设置当前活动分类
  SET_ACTIVE_CATEGORY(state, category) {
    state.activeCategory = category
  }
}

export default {
  namespaced: true,
  state,
  getters,
  actions,
  mutations
} 